home *** CD-ROM | disk | FTP | other *** search
/ EuroCD 3 / EuroCD 3.iso / Emulators / v2600 / Source.lha / Source / table.c < prev    next >
C/C++ Source or Header  |  1997-04-24  |  18KB  |  639 lines

  1. /*****************************************************************************
  2.  
  3.    This file is part of x2600, the Atari 2600 Emulator
  4.    ===================================================
  5.    
  6.    Copyright 1996 Alex Hornby. For contributions see the file CREDITS.
  7.  
  8.    This software is distributed under the terms of the GNU General Public
  9.    License. This is free software with ABSOLUTELY NO WARRANTY.
  10.    
  11.    See the file COPYING for Details.
  12.    
  13.    $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
  14. ******************************************************************************/
  15.  
  16. /*
  17.  * $Id: table.c,v 1.4 1996/08/26 15:04:20 ahornby Exp $
  18.  *
  19.  * This was part of the x64 Commodore 64 emulator.
  20.  * See README for copyright notice
  21.  *
  22.  * This file contains lookup-table which is used to translate
  23.  * MOS6502 machine instructions. Machine code is used as index
  24.  * to array called lookup. Pointer to function is then fetched
  25.  * from array and function is called.
  26.  * Timing of the undocumented opcodes is based on information
  27.  * in an article in C=Lehti by Kai Lindfors and Topi Maurola.
  28.  *
  29.  *
  30.  * Written by
  31.  *   Vesa-Matti Puro (vmp@lut.fi)
  32.  *   Jarkko Sonninen (sonninen@lut.fi)
  33.  *   Jouko Valta (jopi@stekt.oulu.fi)
  34.  *
  35.  */
  36.  
  37. #include "cpu.h"
  38. #include "mnemonic.h"
  39.  
  40.  
  41. /*
  42.  * The "mnemonic.h" file contains #defines for BRK, ORA, NOOP... which
  43.  * are character strings, i.e. #define BRK    "BRK"
  44.  * #define ORA    "ORA" . . . Used mainly to reduce typing...
  45.  *
  46.  * There are #defines for addressing modes i.e. IMPLIED, INDIRECT_X,
  47.  * ZERO_PAGE in "cpu.h"... These can be used to make a diassembler.
  48.  */
  49.  
  50.  
  51. int clength[] =
  52. {1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 2, 2, 2, 0};
  53.  
  54. struct lookup_tag lookup[] =
  55. {
  56.  
  57. /****  Positive  ****/
  58.  
  59.     /* 00 */
  60.   {BRK, IMPLIED, M_NONE, M_PC, 7, 0},    /* Pseudo Absolute */
  61.     /* 01 */
  62.   {ORA, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  63.     /* 02 */
  64.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  65.     /* 03 */
  66.   {SLO, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  67.  
  68.     /* 04 */
  69.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  70.     /* 05 */
  71.   {ORA, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  72.     /* 06 */
  73.   {ASL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  74.     /* 07 */
  75.   {SLO, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  76.  
  77.     /* 08 */
  78.   {PHP, IMPLIED, M_SR, M_NONE, 3, 0},
  79.     /* 09 */
  80.   {ORA, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  81.     /* 0a */
  82.   {ASL, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  83.     /* 0b */
  84.   {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
  85.  
  86.     /* 0c */
  87.   {NOOP, ABSOLUTE, M_NONE, M_NONE, 4, 0},
  88.     /* 0d */
  89.   {ORA, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  90.     /* 0e */
  91.   {ASL, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  92.     /* 0f */
  93.   {SLO, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  94.  
  95.     /* 10 */
  96.   {BPL, RELATIVE, M_REL, M_NONE, 2, 0},
  97.     /* 11 */
  98.   {ORA, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  99.     /* 12 */
  100.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  101.     /* 13 */
  102.   {SLO, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  103.  
  104.     /* 14 */
  105.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  106.     /* 15 */
  107.   {ORA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  108.     /* 16 */
  109.   {ASL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  110.     /* 17 */
  111.   {SLO, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  112.  
  113.     /* 18 */
  114.   {CLC, IMPLIED, M_NONE, M_FC, 2, 0},
  115.     /* 19 */
  116.   {ORA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  117.     /* 1a */
  118.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  119.     /* 1b */
  120.   {SLO, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  121.  
  122.     /* 1c */
  123.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  124.     /* 1d */
  125.   {ORA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  126.     /* 1e */
  127.   {ASL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  128.     /* 1f */
  129.   {SLO, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  130.  
  131.     /* 20 */
  132.   {JSR, ABSOLUTE, M_ADDR, M_PC, 6, 0},
  133.     /* 21 */
  134.   {AND, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect ,X) */
  135.     /* 22 */
  136.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  137.     /* 23 */
  138.   {RLA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  139.  
  140.     /* 24 */
  141.   {BIT, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  142.     /* 25 */
  143.   {AND, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  144.     /* 26 */
  145.   {ROL, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  146.     /* 27 */
  147.   {RLA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  148.  
  149.     /* 28 */
  150.   {PLP, IMPLIED, M_NONE, M_SR, 4, 0},
  151.     /* 29 */
  152.   {AND, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  153.     /* 2a */
  154.   {ROL, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  155.     /* 2b */
  156.   {ANC, IMMEDIATE, M_ACIM, M_ACNC, 2, 0},
  157.  
  158.     /* 2c */
  159.   {BIT, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  160.     /* 2d */
  161.   {AND, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  162.     /* 2e */
  163.   {ROL, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  164.     /* 2f */
  165.   {RLA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  166.  
  167.     /* 30 */
  168.   {BMI, RELATIVE, M_REL, M_NONE, 2, 0},
  169.     /* 31 */
  170.   {AND, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  171.     /* 32 */
  172.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  173.     /* 33 */
  174.   {RLA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  175.  
  176.     /* 34 */
  177.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  178.     /* 35 */
  179.   {AND, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  180.     /* 36 */
  181.   {ROL, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  182.     /* 37 */
  183.   {RLA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  184.  
  185.     /* 38 */
  186.   {SEC, IMPLIED, M_NONE, M_FC, 2, 0},
  187.     /* 39 */
  188.   {AND, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  189.     /* 3a */
  190.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  191.     /* 3b */
  192.   {RLA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  193.  
  194.     /* 3c */
  195.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  196.     /* 3d */
  197.   {AND, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  198.     /* 3e */
  199.   {ROL, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  200.     /* 3f */
  201.   {RLA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  202.  
  203.     /* 40 */
  204.   {RTI, IMPLIED, M_NONE, M_PC, 6, 0},
  205.     /* 41 */
  206.   {EOR, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  207.     /* 42 */
  208.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  209.     /* 43 */
  210.   {SRE, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  211.  
  212.     /* 44 */
  213.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  214.     /* 45 */
  215.   {EOR, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  216.     /* 46 */
  217.   {LSR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  218.     /* 47 */
  219.   {SRE, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  220.  
  221.     /* 48 */
  222.   {PHA, IMPLIED, M_AC, M_NONE, 3, 0},
  223.     /* 49 */
  224.   {EOR, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  225.     /* 4a */
  226.   {LSR, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  227.     /* 4b */
  228.   {ASR, IMMEDIATE, M_ACIM, M_AC, 2, 0},        /* (AC & IMM) >>1 */
  229.  
  230.     /* 4c */
  231.   {JMP, ABSOLUTE, M_ADDR, M_PC, 3, 0},    /* Absolute */
  232.     /* 4d */
  233.   {EOR, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  234.     /* 4e */
  235.   {LSR, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  236.     /* 4f */
  237.   {SRE, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  238.  
  239.     /* 50 */
  240.   {BVC, RELATIVE, M_REL, M_NONE, 2, 0},
  241.     /* 51 */
  242.   {EOR, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  243.     /* 52 */
  244.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  245.     /* 53 */
  246.   {SRE, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  247.  
  248.     /* 54 */
  249.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  250.     /* 55 */
  251.   {EOR, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  252.     /* 56 */
  253.   {LSR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  254.     /* 57 */
  255.   {SRE, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  256.  
  257.     /* 58 */
  258.   {CLI, IMPLIED, M_NONE, M_FI, 2, 0},
  259.     /* 59 */
  260.   {EOR, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  261.     /* 5a */
  262.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  263.     /* 5b */
  264.   {SRE, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  265.  
  266.     /* 5c */
  267.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  268.     /* 5d */
  269.   {EOR, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  270.     /* 5e */
  271.   {LSR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  272.     /* 5f */
  273.   {SRE, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  274.  
  275.     /* 60 */
  276.   {RTS, IMPLIED, M_NONE, M_PC, 6, 0},
  277.     /* 61 */
  278.   {ADC, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  279.     /* 62 */
  280.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  281.     /* 63 */
  282.   {RRA, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  283.  
  284.     /* 64 */
  285.   {NOOP, ZERO_PAGE, M_NONE, M_NONE, 3, 0},
  286.     /* 65 */
  287.   {ADC, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  288.     /* 66 */
  289.   {ROR, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  290.     /* 67 */
  291.   {RRA, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  292.  
  293.     /* 68 */
  294.   {PLA, IMPLIED, M_NONE, M_AC, 4, 0},
  295.     /* 69 */
  296.   {ADC, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  297.     /* 6a */
  298.   {ROR, ACCUMULATOR, M_AC, M_AC, 2, 0},        /* Accumulator */
  299.     /* 6b */
  300.   {ARR, IMMEDIATE, M_ACIM, M_AC, 2, 0},        /* ARR isn't typo */
  301.  
  302.     /* 6c */
  303.   {JMP, ABS_INDIRECT, M_AIND, M_PC, 5, 0},    /* Indirect */
  304.     /* 6d */
  305.   {ADC, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  306.     /* 6e */
  307.   {ROR, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  308.     /* 6f */
  309.   {RRA, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  310.  
  311.     /* 70 */
  312.   {BVS, RELATIVE, M_REL, M_NONE, 2, 0},
  313.     /* 71 */
  314.   {ADC, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  315.     /* 72 */
  316.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT relative? */
  317.     /* 73 */
  318.   {RRA, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  319.  
  320.     /* 74 */
  321.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  322.     /* 75 */
  323.   {ADC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  324.     /* 76 */
  325.   {ROR, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  326.     /* 77 */
  327.   {RRA, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  328.  
  329.     /* 78 */
  330.   {SEI, IMPLIED, M_NONE, M_FI, 2, 0},
  331.     /* 79 */
  332.   {ADC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  333.     /* 7a */
  334.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  335.     /* 7b */
  336.   {RRA, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  337.  
  338.     /* 7c */
  339.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  340.     /* 7d */
  341.   {ADC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  342.     /* 7e */
  343.   {ROR, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  344.     /* 7f */
  345.   {RRA, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  346.  
  347. /****  Negative  ****/
  348.  
  349.     /* 80 */
  350.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  351.     /* 81 */
  352.   {STA, INDIRECT_X, M_AC, M_INDX, 6, 0},    /* (Indirect,X) */
  353.     /* 82 */
  354.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  355.     /* 83 */
  356.   {SAX, INDIRECT_X, M_ANXR, M_INDX, 6, 0},
  357.  
  358.     /* 84 */
  359.   {STY, ZERO_PAGE, M_YR, M_ZERO, 3, 0},        /* Zeropage */
  360.     /* 85 */
  361.   {STA, ZERO_PAGE, M_AC, M_ZERO, 3, 0},        /* Zeropage */
  362.     /* 86 */
  363.   {STX, ZERO_PAGE, M_XR, M_ZERO, 3, 0},        /* Zeropage */
  364.     /* 87 */
  365.   {SAX, ZERO_PAGE, M_ANXR, M_ZERO, 3, 0},
  366.  
  367.     /* 88 */
  368.   {DEY, IMPLIED, M_YR, M_YR, 2, 0},
  369.     /* 89 */
  370.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  371.     /* 8a */
  372.   {TXA, IMPLIED, M_XR, M_AC, 2, 0},
  373. /****  very abnormal: usually AC = AC | #$EE & XR & #$oper  ****/
  374.     /* 8b */
  375.   {ANE, IMMEDIATE, M_AXIM, M_AC, 2, 0},
  376.  
  377.     /* 8c */
  378.   {STY, ABSOLUTE, M_YR, M_ABS, 4, 0},    /* Absolute */
  379.     /* 8d */
  380.   {STA, ABSOLUTE, M_AC, M_ABS, 4, 0},    /* Absolute */
  381.     /* 8e */
  382.   {STX, ABSOLUTE, M_XR, M_ABS, 4, 0},    /* Absolute */
  383.     /* 8f */
  384.   {SAX, ABSOLUTE, M_ANXR, M_ABS, 4, 0},
  385.  
  386.     /* 90 */
  387.   {BCC, RELATIVE, M_REL, M_NONE, 2, 0},
  388.     /* 91 */
  389.   {STA, INDIRECT_Y, M_AC, M_INDY, 6, 0},    /* (Indirect),Y */
  390.     /* 92 */
  391.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT relative? */
  392.     /* 93 */
  393.   {SHA, INDIRECT_Y, M_ANXR, M_STH0, 6, 0},
  394.  
  395.     /* 94 */
  396.   {STY, ZERO_PAGE_X, M_YR, M_ZERX, 4, 0},    /* Zeropage,X */
  397.     /* 95 */
  398.   {STA, ZERO_PAGE_X, M_AC, M_ZERX, 4, 0},    /* Zeropage,X */
  399.     /* 96 */
  400.   {STX, ZERO_PAGE_Y, M_XR, M_ZERY, 4, 0},    /* Zeropage,Y */
  401.     /* 97 */
  402.   {SAX, ZERO_PAGE_Y, M_ANXR, M_ZERY, 4, 0},
  403.  
  404.     /* 98 */
  405.   {TYA, IMPLIED, M_YR, M_AC, 2, 0},
  406.     /* 99 */
  407.   {STA, ABSOLUTE_Y, M_AC, M_ABSY, 5, 0},    /* Absolute,Y */
  408.     /* 9a */
  409.   {TXS, IMPLIED, M_XR, M_SP, 2, 0},
  410. /*** This is very mysterious command ... */
  411.     /* 9b */
  412.   {SHS, ABSOLUTE_Y, M_ANXR, M_STH3, 5, 0},
  413.  
  414.     /* 9c */
  415.   {SHY, ABSOLUTE_X, M_YR, M_STH2, 5, 0},
  416.     /* 9d */
  417.   {STA, ABSOLUTE_X, M_AC, M_ABSX, 5, 0},    /* Absolute,X */
  418.     /* 9e */
  419.   {SHX, ABSOLUTE_Y, M_XR, M_STH1, 5, 0},
  420.     /* 9f */
  421.   {SHA, ABSOLUTE_Y, M_ANXR, M_STH1, 5, 0},
  422.  
  423.     /* a0 */
  424.   {LDY, IMMEDIATE, M_IMM, M_YR, 2, 0},    /* Immediate */
  425.     /* a1 */
  426.   {LDA, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (indirect,X) */
  427.     /* a2 */
  428.   {LDX, IMMEDIATE, M_IMM, M_XR, 2, 0},    /* Immediate */
  429.     /* a3 */
  430.   {LAX, INDIRECT_X, M_INDX, M_ACXR, 6, 0},    /* (indirect,X) */
  431.  
  432.     /* a4 */
  433.   {LDY, ZERO_PAGE, M_ZERO, M_YR, 3, 0},        /* Zeropage */
  434.     /* a5 */
  435.   {LDA, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  436.     /* a6 */
  437.   {LDX, ZERO_PAGE, M_ZERO, M_XR, 3, 0},        /* Zeropage */
  438.     /* a7 */
  439.   {LAX, ZERO_PAGE, M_ZERO, M_ACXR, 3, 0},
  440.  
  441.     /* a8 */
  442.   {TAY, IMPLIED, M_AC, M_YR, 2, 0},
  443.     /* a9 */
  444.   {LDA, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  445.     /* aa */
  446.   {TAX, IMPLIED, M_AC, M_XR, 2, 0},
  447.     /* ab */
  448.   {LXA, IMMEDIATE, M_ACIM, M_ACXR, 2, 0},    /* LXA isn't a typo */
  449.  
  450.     /* ac */
  451.   {LDY, ABSOLUTE, M_ABS, M_YR, 4, 0},    /* Absolute */
  452.     /* ad */
  453.   {LDA, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  454.     /* ae */
  455.   {LDX, ABSOLUTE, M_ABS, M_XR, 4, 0},    /* Absolute */
  456.     /* af */
  457.   {LAX, ABSOLUTE, M_ABS, M_ACXR, 4, 0},
  458.  
  459.     /* b0 */
  460.   {BCS, RELATIVE, M_REL, M_NONE, 2, 0},
  461.     /* b1 */
  462.   {LDA, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (indirect),Y */
  463.     /* b2 */
  464.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  465.     /* b3 */
  466.   {LAX, INDIRECT_Y, M_INDY, M_ACXR, 5, 1},
  467.  
  468.     /* b4 */
  469.   {LDY, ZERO_PAGE_X, M_ZERX, M_YR, 4, 0},    /* Zeropage,X */
  470.     /* b5 */
  471.   {LDA, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  472.     /* b6 */
  473.   {LDX, ZERO_PAGE_Y, M_ZERY, M_XR, 4, 0},    /* Zeropage,Y */
  474.     /* b7 */
  475.   {LAX, ZERO_PAGE_Y, M_ZERY, M_ACXR, 4, 0},
  476.  
  477.     /* b8 */
  478.   {CLV, IMPLIED, M_NONE, M_FV, 2, 0},
  479.     /* b9 */
  480.   {LDA, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  481.     /* ba */
  482.   {TSX, IMPLIED, M_SP, M_XR, 2, 0},
  483.     /* bb */
  484.   {LAS, ABSOLUTE_Y, M_SABY, M_ACXS, 4, 1},
  485.  
  486.     /* bc */
  487.   {LDY, ABSOLUTE_X, M_ABSX, M_YR, 4, 1},    /* Absolute,X */
  488.     /* bd */
  489.   {LDA, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  490.     /* be */
  491.   {LDX, ABSOLUTE_Y, M_ABSY, M_XR, 4, 1},    /* Absolute,Y */
  492.     /* bf */
  493.   {LAX, ABSOLUTE_Y, M_ABSY, M_ACXR, 4, 1},
  494.  
  495.     /* c0 */
  496.   {CPY, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  497.     /* c1 */
  498.   {CMP, INDIRECT_X, M_INDX, M_NONE, 6, 0},    /* (Indirect,X) */
  499.     /* c2 */
  500.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},    /* occasional TILT */
  501.     /* c3 */
  502.   {DCP, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  503.  
  504.     /* c4 */
  505.   {CPY, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  506.     /* c5 */
  507.   {CMP, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  508.     /* c6 */
  509.   {DEC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  510.     /* c7 */
  511.   {DCP, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  512.  
  513.     /* c8 */
  514.   {INY, IMPLIED, M_YR, M_YR, 2, 0},
  515.     /* c9 */
  516.   {CMP, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  517.     /* ca */
  518.   {DEX, IMPLIED, M_XR, M_XR, 2, 0},
  519.     /* cb */
  520.   {SBX, IMMEDIATE, M_IMM, M_XR, 2, 0},
  521.  
  522.     /* cc */
  523.   {CPY, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  524.     /* cd */
  525.   {CMP, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  526.     /* ce */
  527.   {DEC, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  528.     /* cf */
  529.   {DCP, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  530.  
  531.     /* d0 */
  532.   {BNE, RELATIVE, M_REL, M_NONE, 2, 0},
  533.     /* d1 */
  534.   {CMP, INDIRECT_Y, M_INDY, M_NONE, 5, 1},    /* (Indirect),Y */
  535.     /* d2 */
  536.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  537.     /* d3 */
  538.   {DCP, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  539.  
  540.     /* d4 */
  541.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  542.     /* d5 */
  543.   {CMP, ZERO_PAGE_X, M_ZERX, M_NONE, 4, 0},    /* Zeropage,X */
  544.     /* d6 */
  545.   {DEC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  546.     /* d7 */
  547.   {DCP, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  548.  
  549.     /* d8 */
  550.   {CLD, IMPLIED, M_NONE, M_FD, 2, 0},
  551.     /* d9 */
  552.   {CMP, ABSOLUTE_Y, M_ABSY, M_NONE, 4, 1},    /* Absolute,Y */
  553.     /* da */
  554.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  555.     /* db */
  556.   {DCP, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  557.  
  558.     /* dc */
  559.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  560.     /* dd */
  561.   {CMP, ABSOLUTE_X, M_ABSX, M_NONE, 4, 1},    /* Absolute,X */
  562.     /* de */
  563.   {DEC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  564.     /* df */
  565.   {DCP, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},
  566.  
  567.     /* e0 */
  568.   {CPX, IMMEDIATE, M_IMM, M_NONE, 2, 0},    /* Immediate */
  569.     /* e1 */
  570.   {SBC, INDIRECT_X, M_INDX, M_AC, 6, 0},    /* (Indirect,X) */
  571.     /* e2 */
  572.   {NOOP, IMMEDIATE, M_NONE, M_NONE, 2, 0},
  573.     /* e3 */
  574.   {ISB, INDIRECT_X, M_INDX, M_INDX, 8, 0},
  575.  
  576.     /* e4 */
  577.   {CPX, ZERO_PAGE, M_ZERO, M_NONE, 3, 0},    /* Zeropage */
  578.     /* e5 */
  579.   {SBC, ZERO_PAGE, M_ZERO, M_AC, 3, 0},        /* Zeropage */
  580.     /* e6 */
  581.   {INC, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},    /* Zeropage */
  582.     /* e7 */
  583.   {ISB, ZERO_PAGE, M_ZERO, M_ZERO, 5, 0},
  584.  
  585.     /* e8 */
  586.   {INX, IMPLIED, M_XR, M_XR, 2, 0},
  587.     /* e9 */
  588.   {SBC, IMMEDIATE, M_IMM, M_AC, 2, 0},    /* Immediate */
  589.     /* ea */
  590.   {NOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  591.     /* eb */
  592.   {USBC, IMMEDIATE, M_IMM, M_AC, 2, 0},        /* same as e9 */
  593.  
  594.     /* ec */
  595.   {CPX, ABSOLUTE, M_ABS, M_NONE, 4, 0},        /* Absolute */
  596.     /* ed */
  597.   {SBC, ABSOLUTE, M_ABS, M_AC, 4, 0},    /* Absolute */
  598.     /* ee */
  599.   {INC, ABSOLUTE, M_ABS, M_ABS, 6, 0},    /* Absolute */
  600.     /* ef */
  601.   {ISB, ABSOLUTE, M_ABS, M_ABS, 6, 0},
  602.  
  603.     /* f0 */
  604.   {BEQ, RELATIVE, M_REL, M_NONE, 2, 0},
  605.     /* f1 */
  606.   {SBC, INDIRECT_Y, M_INDY, M_AC, 5, 1},    /* (Indirect),Y */
  607.     /* f2 */
  608.   {JAM, IMPLIED, M_NONE, M_NONE, 0, 0},        /* TILT */
  609.     /* f3 */
  610.   {ISB, INDIRECT_Y, M_INDY, M_INDY, 8, 0},
  611.  
  612.     /* f4 */
  613.   {NOOP, ZERO_PAGE_X, M_NONE, M_NONE, 4, 0},
  614.     /* f5 */
  615.   {SBC, ZERO_PAGE_X, M_ZERX, M_AC, 4, 0},    /* Zeropage,X */
  616.     /* f6 */
  617.   {INC, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},    /* Zeropage,X */
  618.     /* f7 */
  619.   {ISB, ZERO_PAGE_X, M_ZERX, M_ZERX, 6, 0},
  620.  
  621.     /* f8 */
  622.   {SED, IMPLIED, M_NONE, M_FD, 2, 0},
  623.     /* f9 */
  624.   {SBC, ABSOLUTE_Y, M_ABSY, M_AC, 4, 1},    /* Absolute,Y */
  625.     /* fa */
  626.   {NOOP, IMPLIED, M_NONE, M_NONE, 2, 0},
  627.     /* fb */
  628.   {ISB, ABSOLUTE_Y, M_ABSY, M_ABSY, 7, 0},
  629.  
  630.     /* fc */
  631.   {NOOP, ABSOLUTE_X, M_NONE, M_NONE, 4, 1},
  632.     /* fd */
  633.   {SBC, ABSOLUTE_X, M_ABSX, M_AC, 4, 1},    /* Absolute,X */
  634.     /* fe */
  635.   {INC, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0},    /* Absolute,X */
  636.     /* ff */
  637.   {ISB, ABSOLUTE_X, M_ABSX, M_ABSX, 7, 0}
  638. };
  639.